package com.vates.reservas.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.vates.reservas.dao.HotelDAO;
import com.vates.reservas.dominio.Hotel;
import com.vates.reservas.dominio.TipoHabitacion;
import com.vates.reservas.service.HotelService;

@Component(value="hotelService")
public class HotelServiceImpl implements HotelService {

	@Autowired
	private HotelDAO hotelDao;

	public void setHotelDao(HotelDAO hotelDao) {
		this.hotelDao = hotelDao;
	}

	@Override
	public void alta(String nombre, String categoria, String domicilio,
			String localidad, String provincia, String codigoPostal,
			String telefono) {
		Hotel hotel = new Hotel();
		hotel.setNombre(nombre);
		hotel.setCategoria(categoria);
		hotel.setDomicilio(domicilio);
		hotel.setLocalidad(localidad);
		hotel.setProvincia(provincia);
		hotel.setCodigoPostal(codigoPostal);
		hotel.setTelefono(telefono);
		hotelDao.nuevo(hotel);

	}

	@Override
	public Hotel busquedaPorId(long id) {

		return hotelDao.busquedaPorId(id);
	}

	@Override
	public Hotel busquedaPorNombre(String nombre) {
		return hotelDao.busquedaPorNombre(nombre);
	}

	@Override
	public void eliminar(long id) {
		Hotel hotel = hotelDao.busquedaPorId(id);
		hotelDao.eliminar(hotel);

	}

	@Override
	public List<Hotel> listadoHoteles() {
		return hotelDao.listado();
	}

	@Override
	public List<Hotel> busquedaPorLocalidad(String localidad) {
		return hotelDao.busquedaPorLocalidad(localidad);
	}

	@Override
	public void editar(long id, String nombre, String categoria,
			String domicilio, String localidad, String provincia,
			String codigoPostal, String telefono) {
		Hotel hotel = hotelDao.busquedaPorId(id);
		hotel.setNombre(nombre);
		hotel.setCategoria(categoria);
		hotel.setDomicilio(domicilio);
		hotel.setLocalidad(localidad);
		hotel.setProvincia(provincia);
		hotel.setCodigoPostal(codigoPostal);
		hotel.setTelefono(telefono);
		hotelDao.modificar(hotel);
	}

	@Override
	public void agregarHabitacion(long idHotel, String nombreHabitacion,
			String descripcionHabitacion, int cantidadHabitacion,
			int maxOcupantesHabitacion, double precioHabitacion) {
		Hotel hotel = hotelDao.busquedaPorId(idHotel);
		TipoHabitacion habitacion = new TipoHabitacion();
		habitacion.setNombre(nombreHabitacion);
		habitacion.setDescripcion(descripcionHabitacion);
		habitacion.setCantidad(cantidadHabitacion);
		habitacion.setMaxOcupantes(maxOcupantesHabitacion);
		habitacion.setPrecio(precioHabitacion);
		hotel.getHabitaciones().add(habitacion);
		hotelDao.modificar(hotel);

	}

	@Override
	public void modificarHabitacion(long idHotel, long idHabitacion,
			String nombreHabitacion, String descripcionHabitacion,
			int cantidadHabitacion, int maxOcupantesHabitacion,
			double precioHabitacion) {
		Hotel hotel = hotelDao.busquedaPorId(idHotel);
		List<TipoHabitacion> habitaciones = hotel.getHabitaciones();
		for (TipoHabitacion th : habitaciones) {
			if (th.getId() == idHabitacion) {
				th.setNombre(nombreHabitacion);
				th.setDescripcion(descripcionHabitacion);
				th.setCantidad(cantidadHabitacion);
				th.setMaxOcupantes(maxOcupantesHabitacion);
				th.setPrecio(precioHabitacion);
			}
		}
		hotelDao.modificar(hotel);

	}

	@Override
	public void eliminarHabitacion(long idHotel, long idHabitacion) {
		Hotel hotel = hotelDao.busquedaPorId(idHotel);
		List<TipoHabitacion> habitaciones = hotel.getHabitaciones();
		int indiceABorrar = 0;
		for (int i = 0; i < habitaciones.size(); i++) {
			if (habitaciones.get(i).getId() == idHabitacion) {
				indiceABorrar = i;
			}
		}
		habitaciones.remove(indiceABorrar);
		hotelDao.modificar(hotel);
	}

}
